package com.ujs.listnode.code.swapPairs;

import com.ujs.listnode.code.ListNode;
import com.ujs.listnode.code.NodeInit;
import com.ujs.listnode.code.RemoveNode.RemoveElements;

/**
 * @author zhangshihao
 * @create 2023-09-27 16:01
 */
public class SwapPairs {
    public static void main(String[] args) {
        ListNode head = NodeInit.getNode();
        ListNode listNode = swapPairs(head);
        while (listNode != null) {
            System.out.print(listNode.getVal() + " ");
            listNode = listNode.getNext();
        }
    }

    public static ListNode swapPairs(ListNode head) {
        ListNode dumyhead = new ListNode(-1); // 虚拟头结点
        dumyhead.next = head;
        ListNode cur = dumyhead;
        ListNode temp; // 临时节点，保存需要交换的两个节点之后的节点
        ListNode firstNode; // 临时节点，需要交换的节点中第一个节点
        ListNode secondNode; // 临时节点，需要交换的节点中第二个节点
        while (cur.next != null && cur.next.next != null) {
            temp = cur.next.next.next;
            // 交换第一个和第二个节点
            firstNode = cur.next;
            secondNode = cur.next.next;
            cur.next = secondNode;
            secondNode.next = firstNode;
            firstNode.next = temp;
            cur = firstNode;
        }
        return dumyhead.next;
    }
}
